如果你也想做实时数仓…
The following article is from Ververica Author 郭华(付空)
数据仓库也是公司数据发展到一定规模后必然会提供的一种基础服务,数据仓库的建设也是“数据智能”中必不可少的一环。
本文将从数据仓库的简介、经历了怎样的发展、如何建设、架构演变、应用案例以及实时数仓与离线数仓的对比六个方面全面分享关于数仓的详细内容。
1.数据仓库简介
数据仓库是一个面向主题的(Subject Oriented)、集成的(Integrate)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策。
实时数据仓库以满足实时化&自动化决策需求; 大数据&数据湖以支持大量&复杂数据类型(文本、图像、视频、音频);
2.数据仓库的发展
随着IT技术走向互联网、移动化,数据源变得越来越丰富,在原来业务数据库的基础上出现了非结构化数据,比如网站 log,IoT 设备数据,APP 埋点数据等,这些数据量比以往结构化的数据大了几个量级,对 ETL 过程、存储都提出了更高的要求; 互联网的在线特性也将业务需求推向了实时化,随时根据当前客户行为而调整策略变得越来越常见,比如大促过程中库存管理,运营管理等(即既有中远期策略型,也有短期操作型);同时公司业务互联网化之后导致同时服务的客户剧增,有些情况人工难以完全处理,这就需要机器自动决策。比如欺诈检测和用户审核。
注:这里不讨论数据湖技术。
3.数据仓库建设方法论
3.1 面向主题
3.2 为多维数据分析服务
3.3 反范式数据模型
注:图片来自 51 CTO
4.数据仓库架构的演变
4.1 离线大数据架构
ODS,操作数据层,保存原始数据; DWD,数据仓库明细层,根据主题定义好事实与维度表,保存最细粒度的事实数据; DM,数据集市/轻度汇总层,在 DWD 层的基础之上根据不同的业务需求做轻度汇总;
4.2 Lambda 架构
注:流处理计算的指标批处理依然计算,最终以批处理为准,即每次批处理计算后会覆盖流处理的结果。(这仅仅是流处理引擎不完善做的折中)
同样的需求需要开发两套一样的代码:这是 Lambda 架构最大的问题,两套代码不仅仅意味着开发困难(同样的需求,一个在批处理引擎上实现,一个在流处理引擎上实现,还要分别构造数据测试保证两者结果一致),后期维护更加困难,比如需求变更后需要分别更改两套代码,独立测试结果,且两个作业需要同步上线。 资源占用增多:同样的逻辑计算两次,整体资源占用会增多(多出实时计算这部分
4.3 Kappa 架构
Kappa 架构可以认为是 Lambda 架构的简化版(只要移除 lambda 架构中的批处理部分即可)。
在 Kappa 架构中,需求修改或历史数据重新处理都通过上游重放完成。
Kappa 架构最大的问题是流式重新处理历史的吞吐能力会低于批处理,但这个可以通过增加计算资源来弥补。
选择一个具有重放功能的、能够保存历史数据并支持多消费者的消息队列,根据需求设置历史数据保存的时长,比如 Kafka,可以保存全部历史数据。 当某个或某些指标有重新处理的需求时,按照新逻辑写一个新作业,然后从上游消息队列的最开始重新消费,把结果写到一个新的下游表中。 当新作业赶上进度后,应用切换数据源,读取 2 中产生的新结果表。 停止老的作业,删除老的结果表。
4.4 Lambda 架构与 Kappa 架构的对比
在真实的场景中,很多时候并不是完全规范的 Lambda 架构或 Kappa 架构,可以是两者的混合,比如大部分实时指标使用 Kappa 架构完成计算,少量关键指标(比如金额相关)使用 Lambda 架构用批处理重新计算,增加一次校对过程。
Kappa 架构并不是中间结果完全不落地,现在很多大数据系统都需要支持机器学习(离线训练),所以实时中间结果需要落地对应的存储引擎供机器学习使用,另外有时候还需要对明细数据查询,这种场景也需要把实时明细层写出到对应的引擎中。参考后面的案例。
另外,随着数据多样性的发展,数据仓库这种提前规定 schema 的模式显得越来难以支持灵活的探索&分析需求,这时候便出现了一种数据湖技术,即把原始数据全部缓存到某个大数据存储上,后续分析时再根据需求去解析原始数据。简单的说,数据仓库模式是 schema on write,数据湖模式是 schema on read。
5.实时数仓案例
菜鸟仓配实时数据仓库本案例参考自菜鸟仓配团队的分享,涉及全局设计、数据模型、数据保障等几个方面。
5.1 整体设计
5.2 数据模型
第一层 DWD 公共实时明细层
第二层 DWS 公共实时汇总层
注:
ADS 是一款提供 OLAP 分析服务的引擎。开源提供类似功能的有,Elastic Search、Kylin、Druid 等; 案例中选择把数据写入到 Hbase 供 KV 查询,也可根据情况选择其他引擎,比如数据量不多,查询压力也不大的话,可以用 MySQL; 因主题建模与业务关系较大,这里不做描述;
5.3 数据保障
大促前的系统压测;
大促中的主备链路保障;
菜鸟双11「仓储配送数据实时化」详情了解:
https://yq.aliyun.com/articles/658787?spm=a2c4e.11153940.0.0.449f1d531ZoDbX
6. 实时数仓与离线数仓的对比
首先,从架构上,实时数仓与离线数仓有比较明显的区别,实时数仓以 Kappa 架构为主,而离线数仓以传统大数据架构为主。Lambda 架构可以认为是两者的中间态。 其次,从建设方法上,实时数仓和离线数仓基本还是沿用传统的数仓主题建模理论,产出事实宽表。另外实时数仓中实时流数据的 join 有隐藏时间语义,在建设中需注意。 最后,从数据保障看,实时数仓因为要保证实时性,所以对数据量的变化较为敏感。在大促等场景下需要提前做好压测和主备保障工作,这是与离线数据的一个较为明显的区别。
▼ 福利时刻 ▼
01. 公众号后台回复「06」获取「数据仓库」「数据治理」等经典大数据和数据仓库电子书或视频赠送。
02. 如要获取《大牛带你从0到1建设数据仓库》实战高清PPT或数仓实战视频,请关注公众号后添加小助手微信[ ID:iom1128 昵称:紫霞仙子],备注:PPT。
03. 高手如云,拉您入群「数据」,「Python」、「资料分享」,公众号后台回复:加群。技术大佬们在等你,各种资源定期分享~
Q: 关于Flink,你还想了解什么?
欢迎留言区与大家分享
觉得不错,请把这篇文章分享给你的朋友哦
投稿请联系小助手:iom1128『紫霞仙子』
更多精彩,请在后台点击“紫霞秘籍”查看